home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
docs
/
x3mdmo01
/
plasma.txt
< prev
next >
Wrap
Text File
|
1994-12-13
|
5KB
|
113 lines
████ ████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀███▄ ▄███▀ -= Demo Programming Series =-
▀███▄ ▄███▀ by Sten Roger Sandvik
▀█████▀
▄███▀███▄ I - HOW TO CREATE PLASMA EFFECTS
▄███▀ ▀███▄
████ ████ (c) 1994 by X3M Productions
████ ████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Hey all out there, and welcome to part one of the X3M demo programming
series. In this and all of the following demo programming series, I'll
take it for granted that you know how to program the VGA controller,
and some knowledge about X-mode.
This time we'll discuss a psychadelic effect that is used in many demos.
Yepp! You got it... Plasmas! Oki, no sence in wasting time here talking
about bullshit... let's go to work!
The Workings of Plasmas
In this text I will only cover the real type of plasma. No sills here,
only state-of-the-art realtime plasma calculations!
When you look at the method realtime plasmas is created, you'll see that
it's merely an intersection of a number of cosinus waves. In this example
we'll use 4 cosinus waves, which makes a very cool effect. The color of
a particular point is calculated using this formula:
color = costbl[cos_1]+costbl[cos_2]+costbl[cos_3]+costbl[cos_4]
The trick is getting the four indexes of that cosinus table to create
something that looks neat. We use two of the indexes for vertical
movement, and the remaining two for horizontal movement.
This means that by changing these valuse we can move along the plasma.
To draw an individual screen, we pass the values of the four to another
four so that we do not disturb the original values. For every pixel on
the x-axis, we add values to the first two indexes, then displaying the
next pixel. For every row down, we add values to the second two indexes.
By altering the original four values, we can get all sorts of neat
movement and cycling of the plasma. The reason we use a cosinus function
is as follows:
- Nice curvature.
- Adding two or more together it's posible to get circular
pictures.
Fading
When you look at the sample demo, you'll see that when it fades in and out
the colors all reach their destination at the same time. This is wery
clever, if I may say so ? Well, in other words, they do not all increment
by one until they hit the right color. If you should do it this way the
fading looks extremely unproffesional.
How to do a step-crossfade
Each red, green and blue values can be between 0 and 63. Have the palette
we want to get to in TOPAL and the temporary palette in TEMPPAL. For each
step, from 0 to 63 do the following:
TEMPPAL[loop].red = TOPAL[loop].red * step / 64;
TEMPPAL[loop].green = TOPAL[loop].green * step / 64;
TEMPPAL[loop].blue = TOPAL[loop].blue * step / 64;
That means if we are halfway through the crossfade (step=32) and the red
value is meant to get to 16, then naturally the color would be value
would be 8, which is half the way. This means all colors will fade in/out
with the same ratios.
Palette rotating
The palette rotating is very simple, so here is a brief description on
how to do it.
- Move color 0 into a temporary variable.
- Move color 1 into color 0
- Move color 2 into color 1
.
.
- Move color 255 into color 254
- Move temporary color into color 255
About the sample demo
The plasma sample demo code is written in pascal, and is (I think) self
explanitory. I have also done an assembly version that you can look at,
but the pascal code illustrates the plasma principle very clearly.
Well if you have any questions about anything (Uhh... well about
programming), just leave me a note. Be seein' YA!
E-mail -> srs@alkymi.unit.no
ZIP file contents:
PLASMA.TXT - The file you are looking at NOW!
PLASMA.PAS - Pascal version of the sample code
PLASMA.EXE - Executable version of the pascal version (Huh ?)
COSTBL.INC - Cosinus table file for the assembler version
PLASMEFF.ASM - Assembler version of the sample code (FAST!)
PLASMEFF.EXE - Executable version of the assembler version!